package scenes;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import paneles.Panel;
import pildoras.Pildora;


import com.uqbar.vainilla.GameScene;
import componentes.Bolita;
import componentes.ComponenteGolpeable;
import componentes.Ladrillo;
import componentes.Paleta;
import componentes.Printer;
import componentes.Texto;

public class Nivel extends GameScene {

	private Paleta paleta;
	private Collection<Bolita> bolitas = new ArrayList<Bolita>();
	private Collection<ComponenteGolpeable> componentesGolpeables = new CopyOnWriteArrayList<ComponenteGolpeable>();
	int cantLadrillos = 0;
	private int vidas = 3;
	private Printer printer = new Printer(this);

	public Collection<ComponenteGolpeable> getComponentesGolpeables() {
		return componentesGolpeables;
	}

	public void setComponentesGolpeables(
			Collection<ComponenteGolpeable> componentesGolpeables) {
		this.componentesGolpeables = componentesGolpeables;
	}

	public void setBolitas(Collection<Bolita> bolitas) {
		this.bolitas = bolitas;
	}

	public Collection<Bolita> getBolitas() {
		return this.bolitas;
	}



	public void chequeaSiChoqueConAlgo(Bolita unaBolita) {
		for (ComponenteGolpeable componente : this.componentesGolpeables) {
			componente.teGolpeoBolita(unaBolita);
		}

	}


	public void addLadrillo(Ladrillo unLadrillo) {
		this.cantLadrillos++;
		this.addComponent(unLadrillo);
		this.addComponenteGolpeable(unLadrillo);

	}

	private void removeComponenteGolpeable(ComponenteGolpeable unComponente) {
		this.componentesGolpeables.remove(unComponente);

	}


	public void sacarLadrillo(Ladrillo unLadrillo) {
		this.cantLadrillos--;
		this.removeComponent(unLadrillo);
		this.removeComponenteGolpeable(unLadrillo);
		this.chequeaSiGanaron();
	}



	public Paleta getPaleta() {
		return this.paleta;
	}

	public void bolitaSePerdio(Bolita unaBolita) {
		this.bolitas.remove(unaBolita);
		this.descontarBolita();
		
	}

	private void descontarBolita() {
		if(this.bolitas.isEmpty() && this.vidas > 0){
			this.vidas--;
			this.chequearSiSePerdio();
		}
	}


	private void chequearSiSePerdio() {
		if(this.vidas == 0){
			this.gameOver();
		}
	}

	private void gameOver() {
		Texto texto = this.printer.perdieron();
		texto.activate();
	}



	public void chequeaSiGanaron() {
		if(this.cantLadrillos == 0){
			this.win();
		}
		
	}

	private void win() {
		Texto texto = this.printer.ganaron();
		texto.activate();
	}
	
	
	//// ADD Components /////
	public void addText(Texto texto) {
		this.addComponent(texto);
	}
	public void addPildora(Pildora pildora) {
		this.addComponent(pildora);
	}
	
	public void addPanel(Panel unPanel) {
		this.addComponent(unPanel);
		this.addComponenteGolpeable(unPanel);
	}

	private void addComponenteGolpeable(ComponenteGolpeable componente) {
		this.componentesGolpeables.add(componente);

	}

	public void addPaleta(Paleta unaPaleta) {
		this.paleta = unaPaleta;
		this.addComponent(unaPaleta);
		this.addComponenteGolpeable(unaPaleta);
	}

	public void addBolita(Bolita b) {
		this.bolitas.add(b);
		this.addComponent(b);
	}

}
